package br.eng.eliseu.gwt.gestaoWeb.client.ui.sistema.configuracoes;

import br.eng.eliseu.gwt.gestaoWeb.client.ui.component.messageBox.MessageBoxPanel;
import br.eng.eliseu.gwt.gestaoWeb.client.ui.core.EnderecoListView;
import br.eng.eliseu.gwt.gestaoWeb.client.ui.core.PessoaView;
import br.eng.eliseu.gwt.gestaoWeb.client.ui.core.UsuarioSistemaView;
import br.eng.eliseu.gwt.gestaoWeb.client.ui.core.UsuarioView;
import br.eng.eliseu.gwt.gestaoWeb.model.pessoa.PessoaDocumento;
import br.eng.eliseu.gwt.gestaoWeb.model.pessoa.TipoDocumentoEnum;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.DisclosurePanel;
import com.google.gwt.user.client.ui.Widget;

public class PerfilUsuarioView extends Composite implements PerfilUsuarioPresenter.Display {

	private static PerfilViewUiBinder uiBinder = GWT.create(PerfilViewUiBinder.class);
	interface PerfilViewUiBinder extends UiBinder<Widget, PerfilUsuarioView> {}
	
	@UiField MessageBoxPanel msgPanel;
	
	@UiField DisclosurePanel usuarioDPanel;
	@UiField DisclosurePanel pessoaDPanel;
	@UiField DisclosurePanel enderecoDPanel;
	@UiField DisclosurePanel usuarioSistemaDPanel;
	
	@UiField Button salvarButton;

	private UsuarioView usuarioView = new UsuarioView();
	private PessoaView pessoaView = new PessoaView();
	private EnderecoListView enderecoListView = new EnderecoListView();
	private UsuarioSistemaView usuarioSistemaView = new UsuarioSistemaView();
	
	private PerfilUsuarioViewVO perfilVO = new PerfilUsuarioViewVO();
	
	public PerfilUsuarioView() {

		initWidget(uiBinder.createAndBindUi(this));
		
		usuarioDPanel.add(usuarioView);
		pessoaDPanel.add(pessoaView);
		enderecoDPanel.add(enderecoListView);
		usuarioSistemaDPanel.add(usuarioSistemaView);
	}

	public Widget asWidget() {
		return this;
	}

	public void showMessage(String message) {
	}
	public void showError(String message) {
	}
	public void showWaitMessage(boolean b) {
	}

	public MessageBoxPanel getMsgPanel() {
		return msgPanel;
	}

	public void populaTela( PerfilUsuarioViewVO perfilVO ){
		this.perfilVO = perfilVO;
		/* Painel Usuario
		 */
		this.usuarioView.setUsuario(perfilVO.getUsuario().getNome());
		this.usuarioView.setSenha(perfilVO.getUsuario().getSenha());
		this.usuarioView.setDataInicio(perfilVO.getUsuario().getDtInicio());
		
		/* Painel Pessoa
		 */
		this.pessoaView.setNome(perfilVO.getUsuario().getPessoa().getNome());
		this.pessoaView.setNascimento(perfilVO.getUsuario().getPessoa().getDtNascimento());
		this.pessoaView.setTipoSexo(perfilVO.getUsuario().getPessoa().getSexo());
		
		this.pessoaView.setDocumentoList(perfilVO.getPessoaDocumentoList());
		this.pessoaView.setFoneList(perfilVO.getPessoaFoneList());
		
		/* Painel Endereco
		 */
		this.enderecoListView.setEnderecoList(perfilVO.getPessoaEnderecoList());
	
		/* Sistemas
		 */
		this.usuarioSistemaView.populaSistemasLBox(perfilVO.getSistemas());
		
	}

	public PerfilUsuarioViewVO getPerfilVO() {
//		perfilVO = new PerfilUsuarioViewVO();

		/* Usuario
		 */
		perfilVO.getUsuario().setNome(usuarioView.getUsuario());
		perfilVO.getUsuario().setSenha(usuarioView.getSenha());
		
		/* Pessoa
		 */
		perfilVO.getUsuario().getPessoa().setNome(pessoaView.getNome());
		perfilVO.getUsuario().getPessoa().setDtNascimento(pessoaView.getNascimento());
		perfilVO.getUsuario().getPessoa().setSexo(pessoaView.getTipoSexo());
		perfilVO.setPessoaDocumentoList(pessoaView.getDocumentoList());
		perfilVO.setPessoaFoneList(pessoaView.getFoneList());
		
		/* Endereco
		 */
		perfilVO.setPessoaEnderecoList(enderecoListView.getEnderecoList());

		return perfilVO;
	}

	public HasClickHandlers getSalvarButton() {
		return salvarButton;
	}

	public boolean checaCampoEmBrancoPerfil() {
		boolean temErro = false;
		getMsgPanel().clear();
		
		if ("".equals(usuarioView.getUsuario())){
			getMsgPanel().addMsg("Informe o Usuario");
			temErro = true;
		}
		if ("".equals(usuarioView.getSenha())){
			getMsgPanel().addMsg("Informe a Senha");
			temErro = true;
		}
		
		if ("".equals(pessoaView.getNome())){
			getMsgPanel().addMsg("Informe o Nome Completo do usuario");
			temErro = true;
		}
		if ("".equals(pessoaView.getNascimento())){
			getMsgPanel().addMsg("Informe a Data de Nascimento");
			temErro = true;
		}
		if ("".equals(pessoaView.getTipoSexoItem())){
			getMsgPanel().addMsg("Informe o Sexo");
			temErro = true;
		}
		if (pessoaView.getDocumentoList()==null || pessoaView.getDocumentoList().size()==0){
			getMsgPanel().addMsg("Informe o CPF");
			temErro = true;
		} else {
			boolean achou = false;
			for (PessoaDocumento d : pessoaView.getDocumentoList()) {
				if (d.getTipoDocumento().equals(TipoDocumentoEnum.CPF)){
					achou = true;
					break;
				}
			}
			if (!achou){
				getMsgPanel().addMsg("Informe o CPF");
				temErro = true;
			}
		}
		
		if (enderecoListView.getEnderecoList()==null || enderecoListView.getEnderecoList().size()==0){
			getMsgPanel().addMsg("Informe um Endereco");
			temErro = true;
		}
		
		return !temErro;
	}

}
